home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / progjour / 1990 / 05 / wlib.asm < prev    next >
Assembly Source File  |  1990-08-03  |  3KB  |  173 lines

  1.     title    wlib - assembly language window interface
  2.     include    window.inc
  3.     include    asm.inc
  4.  
  5. ; (c) 1990 Soft Advances, all rights reserved.
  6.  
  7.     .data?
  8. WReq    _WReq    <>            ; window request packet
  9. WRep    _WRep    <>            ; reply/event packet
  10.  
  11.  
  12.     .code
  13.     extn    transmit_window_request,receive_window_reply,video_preset
  14.     public    WCreateWindow,WPreset,WDrawText
  15.  
  16.  
  17. ;;    get reply
  18. ;
  19. ;    exit    DS:SI    reply packet from server
  20. ;        Cf    if error
  21. ;    uses    AX
  22. ;
  23. get_reply proc
  24.     pushm    cx,ss
  25.     pop    ds
  26.     lea    si,WRep[bp]
  27.     mov    cx,SIZEOF_WREP
  28.     call    receive_window_reply
  29.     pop    cx
  30.     ret
  31. get_reply endp
  32.  
  33.  
  34. ;;    request packet read
  35. ;
  36. ;    exit    DS:SI    request packet
  37. ;
  38. request_packet_read proc
  39.     push    ss
  40.     pop    ds
  41.     lea    si,WReq[bp]
  42.     ret
  43. request_packet_read endp
  44.  
  45.  
  46. ;;    request packet write
  47. ;
  48. ;    exit    ES:DI    request packet
  49. ;
  50. request_packet_write proc
  51.     push    ss
  52.     pop    es
  53.     lea    di,WReq[bp]
  54.     ret
  55. request_packet_write endp
  56.  
  57.  
  58. ;;    send long request
  59. ;
  60. ;    entry    CX    text byte count
  61. ;        DS:SI    request packet
  62. ;    uses    AX
  63. ;
  64. send_long_request proc
  65.     push    cx
  66.     add    cx,SIZEOF_WREQ
  67.     call    transmit_window_request
  68.     pop    cx
  69.     ret
  70. send_long_request endp
  71.  
  72.  
  73. ;;    send short request
  74. ;
  75. ;    uses    AX
  76. ;
  77. send_short_request proc
  78.     push    cx
  79.     mov    cx,SIZEOF_WREQ
  80.     call    transmit_window_request
  81.     pop    cx
  82.     ret
  83. send_short_request endp
  84.  
  85.  
  86. ;;    WCreateWindow
  87. ;
  88. ;    entry    BX    parent window
  89. ;        CL    x
  90. ;        CH    y
  91. ;        DL    width  (> 0)
  92. ;        DH    height (> 0)
  93. ;    exit    BX    window handle
  94. ;        Cf    if error (no memory, too many windows)
  95. ;    uses    AX
  96. ;    note    border width is 1
  97. ;
  98. WCreateWindow proc
  99.     pushm    si,ds
  100.     call    request_packet_read
  101.     mov    WReq_code[si],W_CreateWindow
  102.     mov    WReq_windowId[si],bx    ;  (set parent window)
  103.     mov    WReq_y_x[si],cx
  104.     mov    WReq_height_width[si],dx
  105.     call    send_short_request
  106.  
  107.     call    get_reply
  108.     jc    wcw1            ; if request failed
  109.     mov    bx,WRep_windowId[si]
  110. wcw1:    popm    ds,si
  111.     ret
  112. WCreateWindow endp
  113.  
  114.  
  115. ;;    WDestroyWindow
  116. ;
  117. ;    entry    BX    window handle
  118. ;        Cf    if bad window
  119. ;    uses    AX
  120. ;
  121. WDestroyWindow proc
  122.     pushm    si,ds
  123.     call    request_packet_read
  124.     mov    WReq_code[si],W_DestroyWindow
  125.     mov    WReq_windowId[si],bx
  126.     call    send_short_request
  127.     popm    ds,si
  128.     ret
  129. WDestroyWindow endp
  130.  
  131.  
  132. ;;    WPreset
  133. ;
  134. ;    may use    AX,BX,CX,DX,DI,SI,DS,ES
  135. ;
  136. WPreset proc
  137.     call    video_preset
  138.     ret
  139. WPreset endp
  140.  
  141.  
  142. ;;    WDrawText
  143. ;
  144. ;    entry    AL    attribute
  145. ;        BX    windowId
  146. ;        CX    string byte count
  147. ;        DL    x coordinate
  148. ;        DH    y coordinate
  149. ;        DS:SI    string pointer
  150. ;    uses    AX
  151. ;
  152. WDrawText    proc
  153.     pushm    di,si,ds,es
  154.     call    request_packet_write    ; copy string to request packet
  155.     lea    di,WReq_text[di]
  156.     push    cx
  157.     rep    movsb
  158.     pop    cx
  159.  
  160.     call    request_packet_read    ; build WDrawText packet
  161.     mov    WReq_code[si],W_Text
  162.     mov    WReq_windowId[si],bx
  163.     mov    WReq_count[si],cx
  164.     mov    WReq_y_x[si],dx
  165.     mov    ah,0
  166.     mov    WReq_attribute[si],ax
  167.     call    send_long_request
  168.     popm    es,ds,si,di
  169.     ret
  170. WDrawText    endp
  171.  
  172.     end
  173.